In a typical relational database management system (DBMS), data is stored within columns of a table. A DBMS usually contains multiple databases, with each database containing one or more tables and each table containing one or more columns. There are a great many situations where data needs to be copied from one table to another. These situations include, but are not limited to data migrations (changes to the database layout and/or content when software is upgraded with new functionality or problem fixes), “dispersal” of data (such as separating a single large database into geographical regions, or splitting the data in some other manner), and creation of test and development environments from production data, or duplication of those environments for parallel development/testing. In many of these situations, the data being transferred is substantial (tables with many hundreds of columns) but subject to relatively small changes, such as changing column data types for migration, or protecting sensitive data when transferring from production to development and test environments. Existing approaches for copying data from one table to another are cumbersome and prone to error.